//! 彩色输出演示
//!
//! 运行: cargo run --example colored_demo --features color
//!
//! ## 配置文件方式
//!
//! 在 `log4r.toml` 中配置彩色开关：
//!
//! ```toml
//! [log4r.appenders.console]
//! enabled = true
//! target = "stdout"
//! colored = true   # 启用彩色，设为 false 禁用
//! ```
//!
//! ## Builder API 方式
//!
//! ```rust,ignore
//! log4r::builder()
//!     .with_console(ConsoleTarget::Stdout)
//!     .with_console_colored(true)  // 显式启用/禁用彩色
//!     .init()?;
//! ```
//!
//! ## 终端自动检测
//!
//! 彩色输出会自动检测终端支持，在以下情况自动禁用：
//! - 设置 `NO_COLOR` 环境变量（遵循 https://no-color.org/ 标准）
//! - `TERM=dumb`
//! - 输出重定向到文件或管道（非 TTY）
//!
//! 检测结果会被缓存，避免重复系统调用开销。

use log4r::{cached_terminal_color_support, should_colorize, ColoredFormatter, Formatter};
use log4r::{Level, LogEvent};
use std::io::IsTerminal;

fn main() {
    println!("=== log4r 彩色格式化器演示 ===\n");

    // 展示终端自动检测
    println!("【终端颜色支持检测】\n");
    println!("stdout.is_terminal(): {}", std::io::stdout().is_terminal());
    println!("NO_COLOR 环境变量: {:?}", std::env::var("NO_COLOR").ok());
    println!("TERM 环境变量: {:?}", std::env::var("TERM").ok());
    println!(
        "cached_terminal_color_support(): {}",
        cached_terminal_color_support()
    );
    println!("should_colorize(true): {}", should_colorize(true));
    println!("should_colorize(false): {}", should_colorize(false));
    println!();

    // 创建启用彩色的格式化器
    let formatter = ColoredFormatter::new(true);

    println!("【启用彩色输出】\n");
    println!("配置方式: colored = true 或 .with_console_colored(true)\n");

    // 演示所有 6 个级别
    let levels = [
        (Level::Trace, "这是 TRACE 级别 - 灰色 (bright_black)"),
        (Level::Debug, "这是 DEBUG 级别 - 蓝色 (blue)"),
        (Level::Info, "这是 INFO 级别 - 绿色 (green)"),
        (Level::Warn, "这是 WARN 级别 - 黄色 (yellow)"),
        (Level::Error, "这是 ERROR 级别 - 红色 (red)"),
        (Level::Fatal, "这是 FATAL 级别 - 红色加粗 (red + bold)"),
    ];

    for (level, message) in levels {
        let event = LogEvent::new(level, "demo::colored", message);
        let output = formatter.format(&event);
        println!("{}", output);
    }

    println!("\n【禁用彩色输出】\n");
    println!("配置方式: colored = false 或 .with_console_colored(false)\n");

    // 创建禁用彩色的格式化器
    let plain_formatter = ColoredFormatter::new(false);

    for (level, message) in levels {
        let event = LogEvent::new(level, "demo::plain", message);
        let output = plain_formatter.format(&event);
        println!("{}", output);
    }

    println!("\n【颜色方案说明】");
    println!("- 时间戳: 暗灰色 (bright_black)");
    println!("- 模块路径: 青色 (cyan)");
    println!("- TRACE: 灰色");
    println!("- DEBUG: 蓝色");
    println!("- INFO: 绿色");
    println!("- WARN: 黄色");
    println!("- ERROR: 红色");
    println!("- FATAL: 红色加粗");

    println!("\n【终端自动检测说明】");
    println!("彩色输出会自动检测终端支持，在以下情况自动禁用：");
    println!("- 设置 NO_COLOR 环境变量（遵循 https://no-color.org/ 标准）");
    println!("- TERM=dumb");
    println!("- 输出重定向到文件或管道（非 TTY）");
    println!("\n测试管道输出: cargo run --example colored_demo --features color | cat");
    println!("测试 NO_COLOR: NO_COLOR=1 cargo run --example colored_demo --features color");
}
